// ----------------------------------------------------------------------------------------------------------------

/* 

子串乘最大值

输入一个由字母表前N个字母组成的字符串（这N个字母在字符串中每个至少出现一次），
取其的两个任意子串，两个子串之间没有相同字母，
但是每个子串内部字母可以重复，求两个子串长度相乘的最大值。所有字母均为小写。

*/
// function getMaxSubstrLenProd(inputStr) {
//   let res = 0;
//   const len = inputStr.length;

//   if (len === 0 || len === 1) return 0;

//   const dp = new Array(len).fill(0);

//   let left = 0,
//     right = 1;

//   while (inputStr[right - 1] === inputStr[right]) {
//     right++;
//   }

//   let mid = right - 1;
//   let leftStr = inputStr.slice(left, mid + 1);
//   let rightStr = inputStr.slice(mid + 1, right + 1);
//   res = Math.max(res, leftStr.length * rightStr.length);
//   dp[right] = res;
//   right++;

//   for (; right < len; right++) {
//     let char = inputStr[right];
//     leftStr = inputStr.slice(left, mid + 1);
//     rightStr = inputStr.slice(mid + 1, right + 1);
//     if (leftStr.indexOf(char) !== -1) {
//       // 归为leftStr：right之前包括right全部归为leftStr
//       right++;
//       char = inputStr[right];
//       while (leftStr.indexOf(char) === -1 && right < len) {
//         right++;
//         leftStr += char;
//       }
//       res = Math.max(res, leftStr.length);
//       // 归为rightStr： 必须要把leftStr所以char字符全部去掉
//     }
//   }

//   return res;
// }

// const input2 = "adcbadcbedbadedcbacbcadbc"; // len("ded") *  len("cbacbca") = 21
// console.log(getMaxSubstrLenProd(input2));

// ----------------------------------------------------------------------------------------------------------------

/* 

移动链表

将链表中大于K的节点移动到尾部，且必须保留原来的顺序

function ListNode(x){
  this.val = x;
  this.next = null;
}

@param node ListNode类 
@param k int整型 
@return ListNode类

*/

// function ListNode(x){
//   this.val = x;
//   this.next = null;
// }

// function moveNode(node, k) {
//   if (node === null || node.next === null) return node;

//   let dummyHead = p = new ListNode();
//   dummyHead.next = node;
//   let prev;

//   prev = dummyHead;
//   p = dummyHead.next;

//   let node2 = p2 = new ListNode();

//   while (p.next) {
//     const val = p.val;
//     if (val > k) {
//       prev.next = p.next;
//       p2.next = p;
//       p2 = p2.next;
//       p.next = null;
//       p = prev.next;
//     } else {
//       p = p.next;
//       prev = prev.next;
//     }
//   }

//   p.next = node2.next;

//   return dummyHead.next;
// }

// let head = input3 = new ListNode(4);
// input3.next = new ListNode(20);
// input3 = input3.next;
// input3.next = new ListNode(6);
// input3 = input3.next;
// input3.next = new ListNode(15);
// input3 = input3.next;
// input3.next = new ListNode(8);
// input3 = input3.next;
// input3.next = new ListNode(5);
// input3 = input3.next;

// head = moveNode(head, 10);

// while(head) {
//   console.log(head.val)
//   head = head.next;
// }